#include "uart.h"

void Uart1_Init(void)	//115200bps@24.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCC;			//设置定时初始值
	TH1 = 0xFF;			//设置定时初始值
	ET1 = 0;			//禁止定时器中断
	TR1 = 1;			//定时器1开始计时
}


// 发送单个字符
void UartSend(char dat)
{
    while (busy); // 等待直到串口不忙
    busy = 1; // 设置忙标志
    SBUF = dat; // 发送数据
    while (!TI); // 等待发送完成
    TI = 0; // 清除发送中断标志
    busy = 0; // 清除忙标志
}

// 发送字符串
void UartSendStr(char *p)
{
    while (*p)
    {
        UartSend(*p++);
    }
}

// 中断服务程序
void UartIsr() interrupt 4 using 1
{
    if (TI) // 发送中断标志
    {
        TI = 0; // 软件清零
        busy = 0; // 清除忙标志
    }
    if (RI) // 接收中断标志
    {
        RI = 0; // 软件清零
        motor_duty = SBUF * 20; // 将接收到的数据放入缓冲区
        SetBits(P_SW2, 1 << 7);
        PWM0T1 = motor_duty; // 在计数值为100H地方输出低电平
        ClrBits(P_SW2, 1 << 7);
    }
}